home *** CD-ROM | disk | FTP | other *** search
/ Steal This CD / steal_this_cd.iso / Chapter 07 - Where the Hackers Are / virc200.exe / {app} / ovs.txt < prev    next >
Text File  |  2003-08-30  |  73KB  |  1,336 lines

  1. VSInterp Scripting Reference - ObjectVersus
  2. Jesse McGrew
  3.  
  4. ObjectVersus (OVS) is a set of extensions to the Versus language that allow
  5. object-oriented programming and the creation and modification of user interface
  6. controls. OVS can be disabled by the host application.
  7.  
  8. Concepts
  9. ========
  10.  
  11. An object is a data structure that combines data with code. Each object belongs
  12. to a class, or a family of objects with the same behavior. Each object that
  13. belongs to a class is called an instance of that class, and it can have
  14. different data from the other instances of the same class, but every instance
  15. of the same class has the same code. Pieces of code (commands and functions)
  16. associated with a class are called methods.
  17.  
  18. Objects and classes exhibit three behaviors that are used in object-oriented
  19. programming:
  20. 1. Inheritance. One class can be based on (derived from) an existing class,
  21.    and it inherits behavior from the existing class as well as having the
  22.    ability to add its own behavior. The new class is called a child class or
  23.    subclass, and the existing class is called the parent class or superclass.
  24. 2. Encapsulation. Instances of a class incorporate both data (properties) and
  25.    code (methods). Typically, instead of operating on an object's data
  26.    directly, outside callers call methods that cause the instance to operate
  27.    on its own data. The implementation of the class's behavior is private to
  28.    the class - the object can be used from outside without having to know how
  29.    it does what it does. This allows the object's behavior to be rewritten
  30.    while still using the same interface to the outside world.
  31. 3. Polymorphism. An object that looks like an instance of one class might
  32.    actually be an instance of a subclass. Child classes can be used in place
  33.    of their parent classes.
  34.  
  35. Objects can have special types of properties called events, which contain code
  36. that the object will call whenever a certain action takes place. For example,
  37. a button object might have an event that it calls when the button is clicked.
  38.  
  39. Where Classes Come From
  40. =======================
  41.  
  42. VSInterp gives access to several controls from Delphi's Visual Component
  43. Library (VCL). The host application can also define its own classes or expose
  44. VCL classes that are not exposed by VSInterp. Additionally, OVS scripts can
  45. define their own classes: see the Class..EndClass construct later in this
  46. document.
  47.  
  48. Creating Objects
  49. ================
  50.  
  51. Objects are created with the $New() function: $New(<classname> <parameters>)
  52. This function returns a unique handle that identifies the instance. If the
  53. class is a visual component, <parameters> can take the form:
  54.   [ownedby <owner-object>] [position <x>,<y>,<w>,<h>]
  55. where <owner-object> is the handle of the object that will own the new
  56. component; and <x>, <y>, <w>, and <h> are the left, top, width, and height
  57. of the new component, respectively. If the class is user-defined, <parameters>
  58. may be an arbitrary string that will be interpreted by the user-defined class.
  59. In other cases, <parameters> will be ignored and may be omitted.
  60.  
  61. It's important to remember that $New() returns an object handle, not the
  62. object itself. If you use $New() and store the result in $MyObject, then
  63. display the contents with 'MessageBox $MyObject', you'll see a number, which
  64. is the index into an object table. If you delete the variable $MyObject with
  65. -@, the object won't be destroyed - you'll just forget its handle. If you
  66. assign a new value to $MyObject, even another object, the original object
  67. won't be destroyed. You must explicitly destroy it (see below).
  68.  
  69. Destroying Objects
  70. ==================
  71.  
  72. To destroy an object, use the Destroy command: Destroy $obj
  73. This deallocates the memory for the object. Any further use of the object
  74. handle should be harmless but may cause unexpected behavior.
  75.  
  76. The Destroy command may cause errors or unpredictable behavior when used
  77. from one of the object's event handlers. In this case, use SafeDestroy
  78. instead. SafeDestroy will wait until the event handlers finish before
  79. destroying the object.
  80.  
  81. Use code like this to destroy an object if it already exists before creating
  82. a new one:
  83.  
  84.   // check if $MyObject is a valid object handle
  85.   if $IsObject($MyObject)
  86.     Destroy $MyObject
  87.   endif
  88.   // create your object
  89.   @ $MyObject = $new(TListBox ownedby 0)
  90.  
  91. Setting Properties
  92. ==================
  93.  
  94. To set a property of an object, use the @P command: @p $obj.PropName = Value
  95. The property must have been defined in the class specification. Properties
  96. can be treated like variables, but often setting a property (and less often,
  97. retrieving it) will cause something to happen. For example, setting a form's
  98. Caption property will cause the title bar of the form to change.
  99.  
  100. Properties of VCL classes have associated data types, and attempting to set
  101. a property to a value of the wrong type may cause an exception to be thrown
  102. (see the section about exceptions later in this document). These types of
  103. properties are accessible from OVS:
  104.  
  105.   Boolean properties
  106.     These can be set to 0 (false), 1 (true), or the strings "False" or "True".
  107.   Integer properties
  108.     These can only be set to a value that contains a valid number.
  109.   Color properties
  110.     These are actually a special type of integer properties. They can be set
  111.     to an integer, a hex number in $$BBGGRR format, or a VCL color constant
  112.     (see the section on VCL color constants later in this document).
  113.   String properties
  114.     These can be set to any value.
  115.   Set properties
  116.     These can be set to a string representation of the set (as used by the
  117.     Versus set functions). For example, the BorderIcons property of a form
  118.     might be set to [biSystemMenu,biMinimize].
  119.   Enumeration properties
  120.     These can be set either to a string representing the enumeration value,
  121.     or the integer index of the value. Enumerations are used when a property
  122.     can only hold a few values which are each referred to by name: for example,
  123.     the Align property can take the values alNone, alLeft, alRight, alTop,
  124.     alBottom, and alClient.    
  125.   Object properties
  126.     These can be set to a valid object handle, or the special value "nil"
  127.     which indicates the absence of an object.
  128.   Event properties
  129.     These can be set to a command to run, or the special value "Nop" (as in
  130.     "no operation") which indicates the absence of an event handler. Note that
  131.     setting an event property to "Nop" does not set an empty event handler, it
  132.     actually causes the event to be unhandled. Some components may distinguish
  133.     between these two possibilities. To set an empty event handler--that is,
  134.     to cause the event to be caught, but no action to be taken in response--
  135.     set the event property to an empty string.
  136.  
  137. All properties of user-defined classes are string properties.
  138.  
  139. Often the multiple-indirection syntax can be used, where the property of an
  140. object that it itself stored in a property is set:
  141.   @p $form.Font.Color = clBlack
  142. This syntax is required when setting certain properties, since there is no way
  143. to retrieve $form.Font as a separate object.
  144.  
  145. Retrieving Properties
  146. =====================
  147.  
  148. To retrieve a property of an object, use the $Prop() function: $Prop($obj.Prop)
  149. This returns the current value of the property. The multiple-indirection syntax
  150. works here as well: $Prop($form.Font.Color)
  151.  
  152. Properties are returned slightly differently than they are set:
  153.  
  154.   Boolean properties
  155.     Always returned one as the strings "True" or "False", never as an integer.
  156.   Integer properties
  157.     Returned as integers.
  158.   Color properties
  159.     Always returned as a decimal integer, never a hex number or VCL color
  160.     constant.
  161.   String properties
  162.     Returned as strings.
  163.   Set properties
  164.     Returned as the string representation of sets: [biSystemMenu,biMinimize].
  165.   Enumeration properties
  166.     Always returned as the string value, never the integer value.
  167.   Object properties
  168.     Retrieving a property never creates a new object handle. If there is no
  169.     object stored in the property, "nil" will be returned. If the object
  170.     stored in the property has been mapped, created by the script, or given
  171.     an object handle by the host application, the handle will be returned.
  172.     Otherwise, the string "<class>" will be returned, and the object will only
  173.     be accessible through the multiple-indirection syntax, or with $mapprop().
  174.   Event properties
  175.     If the property contains no event handler, "Nop" will be returned. If the
  176.     property contains an event handling command that was set with OVS, the
  177.     command will be returned.
  178.  
  179.     Otherwise, if the property contains an event handler that was set by
  180.     the VCL or the host application (a handler written in compiled code,
  181.     instead of script code), VSInterp will attempt to create and return a
  182.     command that will call the compiled event handler. However, not all event
  183.     types are supported this way, and for many event types the returned command
  184.     will be useless and may cause exceptions or crash the application. This
  185.     technique of creating a command to call a compiled event handler will only
  186.     work for events that take a single parameter, Sender. These events are
  187.     called notify events, and common events like OnClick, OnActivate, and
  188.     OnResize are notify events.
  189.  
  190. Calling Methods
  191. ===============
  192.  
  193. Methods can be called as either commands or functions. To call a method as
  194. a command, write its handle, a period, and the method name, followed by the
  195. parameters: '$obj.MethodName arg1 arg2'. Any result from the method will be
  196. discarded. To call a method as a function, write its handle, a period, and the
  197. method name, followed by the parameters enclosed in parentheses (or a set of
  198. empty parentheses if there are no parameters): '$obj.MethodName(arg1 arg2)'.
  199. The function's return value will be the result of the method. Note that methods
  200. can only be called as functions when the object handle is in a variable.
  201.  
  202. Writing Event Handlers
  203. ======================
  204.  
  205. To set an event handler on an object, use @P to set the event property of the
  206. object: @p $button.OnClick = MessageBox You clicked me!
  207. Certain variables are available to event handlers, depending on the type of
  208. the event. The variable $Sender, which holds the handle of the object that
  209. caused the event to run, is available to every type of event handler. These
  210. variables are available even when the event handler command is an alias call:
  211.   @p $button.OnClick = _BUTTON_ONCLICK
  212.   Alias _BUTTON_ONCLICK
  213.     MessageBox You clicked the button marked $prop($Sender.Caption).
  214.   EndAlias
  215.  
  216. Note that the command in an event handler is not evaluated before it is run.
  217. If the command needs to be evaluated, put Eval before it:
  218.   @p $button.OnClick = Eval MessageBox You clicked the button $$Sender.
  219. Especially note the use of two dollar signs: the right side of the statement
  220. is evaluated when the property is set, so $$Sender is used to prevent
  221. $Sender from being evaluated immediately.
  222.  
  223. The Story Behind Exceptions
  224. ===========================
  225.  
  226. The VCL or VSInterp might throw exceptions any time the script calls a method
  227. with invalid parameters, tries to create an object improperly, tries to destroy
  228. an object that has already been destroyed, or refers to an invalid method or
  229. property. When this happens, the rest of the enclosing routine will not be
  230. evaluated. If the exception occurs inside a function call, the result of the
  231. function call will be unpredictable but the routine that called the function
  232. will continue running.
  233.  
  234. VCL Color Reference
  235. ===================
  236.  
  237. These color constants are always the same on every system, because they
  238. represent a specific RGB color: clBlack, clMaroon, clGreen, clOlive, clNavy,
  239. clPurple, clTeal, clGray, clSilver, clRed, clLime, clBlue, clFuchsia, clAqua,
  240. clWhite.
  241.  
  242. These color constants depend on the user's Windows settings, and represent
  243. color values that can be changed in Control Panel:
  244.  
  245. clBackground            Current color of the Windows background
  246. clActiveCaption         Current color of the title bar of the active window
  247. clInactiveCaption       Current color of the title bar of inactive windows
  248. clMenu                  Current background color of menus
  249. clWindow                Current background color of windows
  250. clWindowFrame           Current color of window frames
  251. clMenuText              Current color of text on menus
  252. clWindowText            Current color of text in windows
  253. clCaptionText           Current color of the text on the title bar of the
  254.                         active window
  255. clActiveBorder          Current border color of the active window
  256. clInactiveBorder        Current border color of inactive windows
  257. clAppWorkSpace          Current color of the application workspace
  258. clHighlight             Current background color of selected text
  259. clHighlightText         Current color of selected text
  260. clBtnFace               Current color of a button face
  261. clBtnShadow             Current color of a shadow cast by a button
  262. clGrayText              Current color of text that is dimmed
  263. clBtnText               Current color of text on a button
  264. clInactiveCaptionText   Current color of the text on the title bar of an
  265.                         inactive window
  266. clBtnHighlight          Current color of the highlighting on a button
  267. cl3DDkShadow            Dark shadow for three-dimensional display elements
  268. cl3DLight               Light color for three-dimensional display elements
  269.                         (for edges facing the light source)
  270. clInfoText              Text color for tooltip controls
  271. clInfoBk                Background color for tooltip controls
  272.  
  273. Remember that other colors may still be used by giving an exact color
  274. specification in $$BBGGRR hex format: for example, $$007FFF is orange.
  275.  
  276. Defining Classes
  277. ================
  278.  
  279. The Class..EndClass construct may be used to create classes that are
  280. implemented in script code. The classes must be defined using this construct
  281. before they are referred to with $New():
  282.  
  283.   Class <class name> [extends <parent class name>]
  284.     <class definition>
  285.   EndClass
  286.  
  287. <class name> is the name that will be used to refer to the new class. If a
  288. parent class name is specified, the class will be a subclass of the specified
  289. parent class (which must have been previously defined with Class..EndClass;
  290. user-defined classes cannot derive from VCL classes).
  291.  
  292. <class definition> consists of zero or more method or property definitions.
  293. Method and property definitions can be prefixed with access specifiers that
  294. control who can access the method or property: 'private' means that it can
  295. only be used by methods of the same class, 'protected' means that it can only
  296. be used by methods of the same class or subclasses, and 'public' (the default)
  297. means that it can be used anywhere.
  298.  
  299. Method definitions
  300. ------------------
  301.  
  302. Method <name>
  303.   <code>
  304. EndMethod
  305.  
  306. Creates a new method with the specified name and code. The code will be called
  307. whenever the method is called, whether it is called as a command or a function.
  308. $0 contains the object handle, a period, and the method name, and it will be
  309. prefixed with a % if the method was called as a function. The parameters will
  310. be passed in $1, $2, and so on, like an alias call.
  311.  
  312. Two special method names can be used: <Create> and <Destroy>. The <Create>
  313. method will be called when an instance of this class is created with $New().
  314. The parameters after the class name in $New() will be passed in as $1, etc.
  315. The <Destroy> method will be called when an instance of this class is
  316. destroyed, and the parameters will be any extra text that was given after the
  317. object handle (e.g., the "foo" in "Destroy $obj foo").
  318.  
  319. Every method has two special variables available: $Caller, which contains the
  320. handle of the object responsible for calling this method (or -1 if the method
  321. was called from an alias, event, or menu item); and $Self, which contains the
  322. handle of the object whose method was called. $Caller will always be the same
  323. as $Self when the method being called is <Create>, <Destroy>, or a property
  324. reader/writer.
  325.  
  326. Property definitions
  327. --------------------
  328.  
  329. Property <name> [read <reader>] [noread] [write <writer>] [nowrite]
  330.  
  331. Creates a new property with the specified name. If a reader is supplied, it
  332. should be the name of a method that will be used to retrieve the property.
  333. Similarly, if a writer is supplied, it should be the name of a method that
  334. will be used to set the property. The special value "Nop" can be used as a
  335. reader or writer to show that other objects cannot read or write the property.
  336. "noread" and "nowrite" are equivalent to "read Nop" and "write Nop",
  337. respectively.
  338.  
  339. If a reader is supplied, the method will be called whenever another object
  340. tries to retrieve the property with $Prop(). The method will have one
  341. parameter: the name of the property ($1). This makes it possible to use the
  342. same reader for multiple properties.
  343.  
  344. If a writer is supplied, the method will be called whenever another object
  345. tries to set the property with @P. The method will have two parameters: the
  346. name of the property ($1) and the value being set ($2-).
  347.  
  348. If no reader or writer is supplied for a property, the property will be read
  349. or written like a variable: the value will be retrieved from or stored in an
  350. internal field in the object instance.
  351.  
  352. Readers and writers are only used by other objects: an object always directly
  353. accesses its own properties as if they were variables. In other words,
  354. $prop($Self.PropName) and '@p $Self.PropName = Value' pretend that no reader
  355. or writer was set for the property. Here's an example of when this might be
  356. useful:
  357.  
  358.   Class TMyButton
  359.     Private Property TheButton
  360.     Property Caption write SetCaption
  361.     Private Method <Create>
  362.       @l $btn = $new(TButton ownedby $someform position 5,5,30,10)
  363.       @p $Self.TheButton = $btn
  364.       @p $btn.Caption = My button
  365.       @p $Self.Caption = My button
  366.     EndMethod
  367.     Private Method <Destroy>
  368.       Destroy $prop($Self.TheButton)
  369.     EndMethod
  370.     Private Method SetCaption
  371.       @p $prop($Self.TheButton).Caption = $2-
  372.       @p $Self.Caption = $2-
  373.     EndMethod
  374.   EndClass
  375.  
  376. Now the Caption property of TMyButton objects will mirror the Caption of the
  377. associated TButton. TMyButton's writer for Caption copies the value to the
  378. TButton, then caches it in its own Caption field. When the TMyButton's Caption
  379. is read, the value is fetched directly from the field.
  380.  
  381. Mapping Objects
  382. ===============
  383.  
  384. The host application can allow OVS scripts access to its forms and controls.
  385. Use the $MapObject() function to do this: $MapObject(FormName:ControlName) or
  386. $MapObject(FormName). The function returns an object handle if mapping
  387. succeeds, or -1 if it fails. The object handle can be used just like a handle
  388. created with $New().
  389.  
  390. To release a mapped object handle without destroying the object, use the
  391. UnmapObject command: UnmapObject $obj
  392.  
  393. Other OVS Commands/Functions
  394. ============================
  395.  
  396. AddToSetProp <object>.<property> <items>
  397.  
  398.   Reads <property> from <object> (the multiple-indirection syntax is allowed).
  399.   If it contains a set, or a string that looks like a set, <items> is added
  400.   (just like with $AddToSet(<propvalue> <items>)) and then stored back into
  401.   the property. This function is only enabled when set functions are enabled.
  402.  
  403. $ClassOf(<object>)
  404.  
  405.   Returns the name of the class that <object> belongs to, or "TUnknown" if the
  406.   object handle is invalid.
  407.  
  408. Inherited <methodname> [<parameters>]
  409.  
  410.   When used in a user-defined class's method, this calls the named method
  411.   from the superclass. If <parameters> is omitted, the method will be called
  412.   with the parameters given to the current method. This is most commonly
  413.   useful in the <Create> method, to ensure that the superclass's constructor
  414.   is called:
  415.     Method <Create>
  416.       Inherited <Create>
  417.       // class-specific initialization goes here
  418.     EndMethod
  419.  
  420. $Inherited(<methodname> [<parameters>])
  421.  
  422.   The same as 'Inherited <methodname> <parameters>', but automatically inserts
  423.   the result. Use this when the inherited method is a function and its value
  424.   is needed by the subclass's method.
  425.  
  426. $IsA(<object> <class>)
  427.  
  428.   Returns true if <object> is a member of <class>, or a class that derives
  429.   from <class>.
  430.  
  431. $MapProp(<object>.<property>)
  432.  
  433.   Used only with object-type properties, maps the stored object to an OVS
  434.   handle and returns it. A new handle is created even if the object is already
  435.   available by a different handle. Use UnmapObject when the handle is no
  436.   longer needed. If the property does not hold an object type, or if no
  437.   object is currently stored, the result is -1. For example:
  438.     @l $myfont = $MapProp($mylabel.Font)
  439.     @p $myfont.Name = Arial Black
  440.     @p $myfont.Size = 36
  441.     UnmapObject $myfont
  442.  
  443. $ParentClassOf(<classname>)
  444.  
  445.   Returns the name of the named class's parent class, "TUnknown" if the class
  446.   name is unknown, or "TOVSObject" if the class is a user-defined class with
  447.   no parent.
  448.  
  449. $ParentClassOf(<object>)
  450.  
  451.   The same as $ParentClassOf($ClassOf(<object>)).
  452.  
  453. RemoveFromSetProp <object>.<property> <items>
  454.  
  455.   Reads <property> from <object> (the multiple-indirection syntax is allowed).
  456.   If it contains a set, or a string that looks like a set, <items> is removed
  457.   (just like with $RemoveFromSet(<propvalue> <items>)) and then stored back
  458.   into the property. This function is only enabled when set functions are
  459.   enabled.
  460.  
  461. Exposed VCL Class Reference
  462. ===========================
  463.  
  464. This section documents the VCL classes that VSInterp exposes to the script.
  465.  
  466. Visible Controls
  467. ----------------
  468.  
  469. Common to most visible controls
  470.   Properties:
  471.     Top (integer)          The top of the control, in pixels down from the top
  472.                            of the control's container (or from the top of the
  473.                            screen, for forms).
  474.     Left (integer)         The left of the control, in pixels from the left of
  475.                            the control's container (or the left edge of the
  476.                            screen, for forms).
  477.     Height (integer)       The height of the control, in pixels.
  478.     Width (integer)        The width of the control, in pixels.
  479.     Align (enumeration)    Determines how the control moves itself. The default
  480.                            is alNone, which makes it stay where it's put. Also
  481.                            available are alTop and alBottom, which make it move
  482.                            to the top or bottom of its container and expand to
  483.                            the width of the container; alLeft or alRight, which
  484.                            make it move to the left or right of its container
  485.                            and expand to the height of the container; and
  486.                            alClient, which makes it fill all the available
  487.                            space in its container.
  488.     Visible (Boolean)      Determines whether the control is visible on the
  489.                            screen.
  490.     Font (object)          Contains a TFont object that describes how text
  491.                            will be drawn on the control.
  492.     PopupMenu (object)     Holds the popup menu that will be displayed when the
  493.                            user right-clicks on the control.
  494.     Color (color)          The background color of the control.
  495.     Hint (string)          The text that appears in the status bar and pop-up
  496.                            hint window when the mouse is held over the control.
  497.                            If the string contains a vertical bar (as in
  498.                            "OK|Accept these changes"), the part before will be
  499.                            shown as a pop-up hint, and the part after will be
  500.                            shown in the status bar.                           
  501.   Methods:
  502.     SetFocus               Causes the control to become activated.
  503.     BringToFront           Causes the control to appear in front of other
  504.                            controls.
  505.     Invalidate             Causes the control to be redrawn next time the
  506.                            program is idle.
  507.     Refresh                Causes the control to be redrawn immediately.
  508.   Events: (not all controls support these)
  509.     OnClick                Called when the control is clicked or otherwise
  510.                            chosen. This is a notify event.
  511.     OnDblClick             Called when the control is double-clicked. This is
  512.                            a notify event.
  513.     OnEnter/OnExit         Called when the control gains or loses the focus.
  514.                            These are notify events.
  515.     OnMouseDown            Called when the mouse is pressed down over the
  516.                            control. Available variables are $Button (mbLeft,
  517.                            mbRight, or mbMiddle), $Shift (set of ssShift,
  518.                            ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, and/or
  519.                            ssDouble), and $X and $Y (coordinates of mouse,
  520.                            relative to the control's top left).
  521.     OnMouseUp              Called when the mouse is released over the control.
  522.                            Same variables as OnMouseDown.
  523.     OnMouseMove            Called when the mouse moves over the control.
  524.                            Available variables are $Shift, $X, and $Y, which
  525.                            are the same as in OnMouseDown.
  526.     OnKeyUp/OnKeyDown      Called when a key is pressed or released while the
  527.                            control has the focus. Available variables are
  528.                            $Shift (same on OnMouseDown) and $Key, which is an
  529.                            integer holding the scan code of the key (the scan
  530.                            code is not the same as the ASCII code). $Key can
  531.                            be changed (with @L, not @) to pretend that another
  532.                            key was pressed. Set $Key to 0 to ignore the key.
  533.     OnKeyPress             Called when a key with an ASCII equivalent is
  534.                            pressed while the control has the focus. The only
  535.                            special variable is $Key, which contains the
  536.                            character as a string. $Key can be changed (with @L)
  537.                            to pretend that another key was pressed. Set $Key to
  538.                            $null to ignore the key.
  539.  
  540. TButton
  541.   This control is a standard Windows push button that can be clicked.
  542.  
  543.   Properties:
  544.     Caption (string)       The text that appears on the button. If there is an
  545.                            ampersand (&) in the text, the next character will
  546.                            be underlined, and pressing alt with that character
  547.                            will be equivalent to clicking the button. Use two
  548.                            ampersands (&&) to make a literal ampersand appear.
  549.     Cancel (Boolean)       Determines whether pressing Escape on the form is
  550.                            equivalent to clicking the button. Each form can
  551.                            only have one cancel button.
  552.     Default (Boolean)      Determines whether pressing Enter on the form is
  553.                            equivalent to clicking the button. Each form can
  554.                            only have one default button.
  555.     ModalResult (integer)  When this has a nonzero value and the form holding
  556.                            the button was shown with ShowModal, clicking this
  557.                            button will cause the form to disappear and the
  558.                            form's ShowModal method to return this value.
  559.  
  560. TEdit
  561.   This control is a standard Windows edit box.
  562.  
  563.   Properties:
  564.     AutoSelect (Boolean)   Determines whether the text in the edit box will
  565.                            automatically be selected when the edit box gains
  566.                            the focus.
  567.     CharCase (enumeration) Determines how the case of the text is changed
  568.                            automatically. When this is set to the default value
  569.                            (ecNormal) the case is left as it is typed. When
  570.                            set to ecLowerCase or ecUpperCase, the text is
  571.                            automatically changed to lower or upper case.
  572.     MaxLength (integer)    Limits the number of characters the user can type.
  573.                            A value of 0 means no limit.
  574.     PasswordChar (integer) Determines whether the text appears masked out with
  575.                            a special character. Set this to the ASCII code of
  576.                            a character to cause that character to appear
  577.                            instead of the actual contents of the control, or 0
  578.                            to disable masking.
  579.     ReadOnly (Boolean)     Determines whether the text can be edited by the
  580.                            user. If this property is true, the user can read
  581.                            and select the text, but not change it.
  582.     SelLength (integer)    The number of characters in the selection.
  583.     SelStart (integer)     The first selected character, where 0 is the first
  584.                            character. If there is no selection, this returns
  585.                            the position of the cursor.
  586.     SelText (string)       The text in the selection. Read this to retrieve the
  587.                            selection, or set it to change the selection.
  588.     Text (string)          The entire contents of the edit box.
  589.   Events:
  590.     OnChange               Called whenever the contents of the edit box change.
  591.                            The Text property has already been changed by the
  592.                            time this is called. This is a notify event.
  593.  
  594. TListBox
  595.   This is a standard Windows list box.
  596.  
  597.   Properties:
  598.     ItemIndex (integer)    The index of the currently selected item in the
  599.                            Items list, or -1 if no item is selected.
  600.     Items (object)         Contains a TStrings object holding the items of the
  601.                            list box.
  602.     MultiSelect (Boolean)  Determines whether the list box will allow more than
  603.                            one item to be selected at a time.
  604.     Sorted (Boolean)       Determines whether new items that are added to Items
  605.                            will automatically be sorted.
  606.   Methods:
  607.     GetSelected(<num>)     Returns 1 if item number <num> (starting at zero)
  608.                            is currently selected, or 0 otherwise.
  609.     SetSelected <num> <value>    Unselects item number <num> if value is
  610.                            nonzero, or selects it otherwise. 
  611.   Events:
  612.     OnClick                This is called whenever an item is selected or
  613.                            unselected.
  614.  
  615. TForm
  616.   This represents a window.
  617.  
  618.   Properties:
  619.     BorderIcons (set)      Determines which icons appear in the form's title
  620.                            bar. Possible members are biSystemMenu, biMinimize,
  621.                            biMaximize, and biHelp.
  622.     BorderStyle (enumeration)  Sets the style of the form's border. Possible
  623.                            values are bsDialog, bsSingle, bsNone, bsSizeable,
  624.                            bsToolWindow, and bsSizeToolWin.    
  625.     FormStyle (enumeration)    Sets the style of the form. The default is
  626.                            fsNormal, which is a regular form. Other values are
  627.                            fsMDIChild, which makes the form an MDI child
  628.                            window (it must have been set ownedby an MDI parent
  629.                            when it was created); fsMDIForm, which makes the
  630.                            form an MDI parent; and fsStayOnTop, which makes the
  631.                            form stay on top of other forms.
  632.     Icon (object)          Contains a TIcon object that holds the form's icon.
  633.     Menu (object)          Contains a TMainMenu object that holds the form's
  634.                            menu bar.
  635.     WindowMenu (object)    Contains a TMenuItem object that holds the form's
  636.                            Window menu. This is only meaningful if the form is
  637.                            an MDI parent.
  638.     WindowState (enumeration)    Sets the display state of the form. This can
  639.                            be wsNormal, wsMinimized, or wsMaximized.
  640.   Methods:
  641.     ArrangeIcons           Arranges the minimized children of an MDI parent.
  642.     Cascade                Cascades the children of an MDI parent.
  643.     ShowModal              Shows the form and does not return control (or let
  644.                            other forms activate) until the user clicks a button
  645.                            on the form that has a nonzero ModalResult.
  646.     Tile                   Tiles the children of an MDI parent.
  647.   Events:
  648.     OnActivate             Called when the form becomes active.
  649.     OnClose                Called when the form is closing. Set (@L) $Action to
  650.                            caNone (don't close), caHide (hide the form),
  651.                            caFree (destroy the form), or caMinimize.
  652.     OnCloseQuery           Called when the form is about to close. Set $CanClose
  653.                            to False to prevent the form from closing.
  654.     OnDeactivate
  655.     OnHide
  656.     OnPaint
  657.     OnShow
  658.  
  659. TLabel
  660.   This is a standard Windows text label.
  661.  
  662.   Properties:
  663.     Alignment (enumeration)    Controls the horizontal placement of text on the
  664.                            label. Possible values are taLeftJustify (the
  665.                            default), taRightJustify, and taCenter.
  666.     AutoSize (Boolean)     Determines whether the label will automatically
  667.                            adjust its size to hold all the text.
  668.     Caption (string)       The text that appears on the label. If ShowAccelChar
  669.                            is true, this can contain ampersands just like
  670.                            TButton's Caption property.
  671.     FocusControl (object)  Holds the control that is activated when the user
  672.                            presses Alt and the underlined character in the
  673.                            label's caption when ShowAccelChar is true.
  674.     ShowAccelChar (Boolean)    Determines whether an ampersand causes the next
  675.                            character in the caption to be underlined and act as
  676.                            an accelerator character.
  677.     Transparent (Boolean)  Determines whether the label is transparent and
  678.                            allows anything underneath it to show through.
  679.     WordWrap (Boolean)     Determines whether text that is too wide to fit in
  680.                            the label automatically wraps to the next line.
  681.  
  682. TStaticText
  683.   This is just like TLabel, but it's a windowed control instead of a graphical
  684.   control. Sometimes TLabel won't work correctly because it isn't windowed: for
  685.   example, it won't appear when placed on an MDI parent form.
  686.  
  687. TCheckBox
  688.   This is a standard Windows check box.
  689.  
  690.   Properties:
  691.     Alignment (enumeration)    Determines whether the caption appears to the
  692.                            left or right of the check box. If this property is
  693.                            taRightJustify (the default) the caption is to the
  694.                            right. If it's taLeftJustify, the caption is to the
  695.                            left.
  696.     AllowGrayed (Boolean)  Determines whether the check box can have a grayed
  697.                            state.
  698.     Checked (Boolean)      Determines whether the check box is checked. This is
  699.                            false if the box is unchecked or grayed.
  700.     State (enumeration)    Determines the state of the check box: cbUnchecked,
  701.                            cbChecked, or (if AllowGrayed is true) cbGrayed.
  702.   Events:
  703.     OnClick                Called when the box's state changes.
  704.  
  705. TRadioButton
  706.   This is a standard Windows radio button. By default, only one radio button in
  707.   a given container can be selected at once. See TRadioGroup for an easy way to
  708.   make a new group of radio buttons.
  709.  
  710.   Properties:
  711.     Alignment (enumeration)    Same as TCheckBox's Alignment property.
  712.     Checked (Boolean)      Determines whether the radio button is checked.
  713.                            Set this to true to select this button and unselect
  714.                            all the others in the group.
  715.   Events:
  716.     OnClick                Called when the button is selected.
  717.  
  718. TRadioGroup
  719.   This represents a group of radio buttons that function together. It appears
  720.   like a TGroupBox with several radio buttons inside.
  721.  
  722.   Properties:
  723.     Columns (integer)      The number of columns of radio buttons shown. The
  724.                            default is 1; values can range from 1 to 16.
  725.     ItemIndex (integer)    The index of the currently selected button in the
  726.                            Items list, or -1 if no button is selected.
  727.     Items (object)         Contains a TStrings object holding the captions of
  728.                            the radio buttons. Adding values to this causes more
  729.                            buttons to be created.
  730.   Events:
  731.     OnClick                Called when one of the radio buttons is selected.
  732.  
  733. TMemo
  734.   This is a standard Windows multiline edit control.
  735.  
  736.   Properties:
  737.     Alignment (enumeration)    Same as TLabel's Alignment property.
  738.     Lines (object)         Contains a TStrings object holding the lines of the
  739.                            edit control.
  740.     ScrollBars (enumeration)   Determines which scroll bars are visible. Values
  741.                            are ssNone, ssHorizontal, ssVertical, and ssBoth.
  742.     SelLength (integer)    The number of characters in the selection.
  743.     SelStart (integer)     The first selected character, where 0 is the first
  744.                            character. If there is no selection, this returns
  745.                            the position of the cursor.
  746.     SelText (string)       The text in the selection. Read this to retrieve the
  747.                            selection, or set it to change the selection.
  748.     WantReturns (Boolean)  Determines the handling of return keystrokes. If
  749.                            this is true, pressing return will start a new line
  750.                            in the edit control; otherwise, it will activate the
  751.                            default button on the form (ctrl-enter will start a
  752.                            new line anyway).
  753.     WantTabs (Boolean)     Determines the handling of tab keystrokes. If this
  754.                            is true, pressing tab will insert a tab character;
  755.                            otherwise, it will move the focus to the next
  756.                            control.
  757.     WordWrap (Boolean)     Determines whether text that is too wide to fit into
  758.                            the visible area of the control should be wrapped
  759.                            onto the next line. Wrapping text this way doesn't
  760.                            insert return characters; the wrapping is only
  761.                            cosmetic.
  762.   Events:
  763.     OnChange               Called whenever the contents of the control change.
  764.                            The Lines property has already been changed by the
  765.                            time this is called. This is a notify event.
  766.  
  767. TPanel
  768.   This is a panel that can contain other controls.
  769.  
  770.   Properties:
  771.     Alignment (enumeration)    Same as TLabel's Alignment property.
  772.     BevelInner (enumeration)   Determines what style the inner edge of the
  773.                            bevel is displayed in. Values are bvNone (no inner
  774.                            edge), bvLowered, and bvRaised.
  775.     BevelOuter (enumeration)   Same as BevelInner, but controls the outer edge.
  776.     BevelWidth (integer)   Controls the width of the individual bevel edges.
  777.     BorderWidth (integer)  The width in pixels of the border.
  778.   Events:
  779.     OnResize               Called whenever the panel's size changes. This is a
  780.                            notify event.
  781.  
  782. TBitBtn
  783.   This is a push button that can include a bitmap on its surface. It derives
  784.   from TButton, so everything there also applies.
  785.  
  786.   Properties:
  787.     Glyph (object)         Contains a TBitmap object holding the bitmap on the
  788.                            button's face.
  789.     Kind (enumeration)     Allows the button to quickly change forms. Values
  790.                            are bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo,
  791.                            bkClose, bkAbort, bkRetry, bkIgnore, bkAll. Each
  792.                            value changes the button's caption, glyph, and
  793.                            ModalResult; except bkCustom, which allows arbitrary
  794.                            values to be chosen for those properties.
  795.     Layout (enumeration)   Determines where the glyph appears. Values are
  796.                            blGlyphLeft, blGlyphRight, blGlyphTop, and
  797.                            blGlyphBottom.
  798.     Margin (integer)       Determines the number of pixels between the edge of
  799.                            the bitmap and the edge of the button. If this is
  800.                            -1 (the default), the image and text are centered.
  801.     NumGlyphs (integer)    Sets the number of images contained in the Glyph
  802.                            property. If a bitmap is loaded there containing
  803.                            more than one image side-by-side (which must all be
  804.                            the same size), set this property to tell the button
  805.                            how many images there are. The first one should be
  806.                            the bitmap for the up position, the second should be
  807.                            the disabled bitmap, and the third should be for the
  808.                            down positon (while the mouse is held over the
  809.                            control).
  810.     Spacing (integer)      Determines the number of pixels between the edge of
  811.                            the bitmap and the text.
  812.  
  813. TScrollBar
  814.   This is a free-standing scroll bar.
  815.  
  816.   Properties:
  817.     Kind (enumeration)     Sets the orientation of the scroll bar. Values are
  818.                            sbHorizontal and sbVertical.
  819.     LargeChange (integer)  Determines how much the Position property changes
  820.                            when the user clicks the scroll bar on either side
  821.                            of the thumb or presses PgUp/PgDn.
  822.     Min/Max (integer)      Sets the minimum and maximum value the Position
  823.                            property can take.
  824.     Position (integer)     Determines the current position of the thumb.
  825.     SmallChange (integer)  Determines how much the Position property changes
  826.                            when the user clicks the arrow buttons or presses
  827.                            the arrow keys.
  828.   Events:
  829.     OnChange               Called after the value of Position changes. This is
  830.                            a notify event.
  831.  
  832. TGroupBox
  833.   This is a standard Windows group box. It can contain other controls.
  834.  
  835.   Properties:
  836.     Caption (string)       The text that appears at the top of the group box.
  837.  
  838. TComboBox
  839.   This combines an edit box with a scrollable list.
  840.  
  841.   Properties:
  842.     DropDownCount (integer)    Determines how many items will fit in the
  843.                            drop-down list part without scrolling.
  844.     ItemIndex (integer)    The index of the currently selected item in the
  845.                            Items list, or -1 if no item is selected.
  846.     Items (object)         Contains a TStrings object holding the items of the
  847.                            drop-down list.
  848.     MaxLength (integer)    Limits the number of characters the user can type.
  849.                            A value of 0 means no limit.
  850.     SelLength (integer)    The number of characters in the selection.
  851.     SelStart (integer)     The first selected character, where 0 is the first
  852.                            character. If there is no selection, this returns
  853.                            the position of the cursor.
  854.     SelText (string)       The text in the selection. Read this to retrieve the
  855.                            selection, or set it to change the selection.
  856.     Sorted (Boolean)       Determines whether the drop-down list is
  857.                            alphabetized.
  858.     Style (enumeration)    Determines the display style of the combo box.
  859.                            Values are csDropDown (drop-down list and edit box),
  860.                            csSimple (edit box with a permanent list box below),
  861.                            and csDropDownList (drop-down list without edit
  862.                            box).
  863.     Text (string)          The text displayed in the edit box.
  864.   Events:
  865.     OnChange               Called when the text displayed in the edit box
  866.                            changes. This is a notify event.
  867.     OnDropDown             Called when the user opens the drop-down list by
  868.                            clicking the arrow at the right of the control. This
  869.                            is a notify event.
  870.  
  871. TProgressBar
  872.   This is a standard Windows progress bar.
  873.  
  874.   Properties:
  875.     Min/Max (integer)      Sets the minimum and maximum values the Position
  876.                            property can take.
  877.     Position               Sets the current position of the progress bar.
  878.  
  879. TMainMenu
  880.   This is the menu bar of a form. Set the form's Menu property to a TMainMenu
  881.   control to give it a menu bar.
  882.  
  883.   Properties:
  884.     Items (object)         Contains a TMenuItem object that holds the items of
  885.                            the menu bar.
  886.  
  887. TPopupMenu
  888.   This is a standard popup menu. Set the PopupMenu of another control to a
  889.   TPopupMenu control to have the popup menu appear when the user right-clicks
  890.   the other control.
  891.  
  892.   Properties:
  893.     Alignment (enumeration)    Sets the corner of the popup menu that will be
  894.                            under the mouse when the menu pops up. Values are
  895.                            paLeft (top-left corner), paCenter (center of the
  896.                            top edge), and paRight (top-right corner).
  897.     AutoPopup (Boolean)    Determines whether the menu will pop up
  898.                            automatically when the user right-clicks on an
  899.                            associated control. If this is false, the popup menu
  900.                            will only be displayed by the Popup method.
  901.     PopupComponent (object)    Contains the last control that was responsible
  902.                            for popping up the menu.
  903.   Methods:
  904.     Popup <X> <Y>          Displays the menu at the given coordinates (relative
  905.                            to the top-left corner of the screen).
  906.   Events:
  907.     OnPopup                Called before the menu is displayed. This is a
  908.                            notify event.
  909.  
  910. TMenuItem
  911.   This describes the properties of an item in the menu. A TMenuItem object can
  912.   contain other menu items to create submenus - use the Add method.
  913.  
  914.   Properties:
  915.     Break (enumeration)    Determines whether the menu item starts a new column
  916.                            in the menu. Values are mbNone (the default - no
  917.                            break), mbBarBreak (starts a new column with a
  918.                            vertical bar in between), and mbBreak (starts a new
  919.                            column with only space in between).
  920.     Caption (string)       The text of the menu item. Ampersands can appear
  921.                            here with the usual effect.
  922.     Checked (Boolean)      Determines whether a check box appears next to the
  923.                            item.
  924.     Default (Boolean)      Determines whether the item appears in boldface and
  925.                            is executed when its parent item is double-clicked.
  926.     Enabled (Boolean)      Determines whether the item is enabled.
  927.     GroupIndex (integer)   Identifies a group of radio button menu items.
  928.     RadioItem (Boolean)    Determines whether the item appears like a radio
  929.                            button when it is checked. Only one item with the
  930.                            same GroupIndex property can be checked at a time.
  931.     Visible (Boolean)      Determines whether the item appears in the menu.
  932.   Methods:
  933.     Add <object>           Adds the object (which must be a TMenuItem) to the
  934.                            end of the menu.
  935.     Delete <num>           Deletes the numbered item from the menu, where 0 is
  936.                            the first item.
  937.     IndexOf(<object>)      Returns the position of the item in the menu.
  938.     Insert <num> <object>  Inserts the item into the menu at the given numbered
  939.                            position.
  940.     Remove <object>        Removes an item and all of its subitems from the
  941.                            menu (but doesn't destroy them).
  942.   Events:
  943.     OnClick                Called when the menu item is chosen. This is a
  944.                            notify event.
  945.  
  946. TListView
  947.   This is the standard Windows list view control, as seen in Explorer folder
  948.   windows (as well as ViRC's ban list and /who window). There are four views:
  949.   large icon, small icon, list, and report (details). Each item that appears
  950.   in the list view is represented by a TListItem object.
  951.   
  952.   Properties:
  953.     BorderStyle (enumeration)  Determines whether a border is drawn around the
  954.                            control. Valid values are bsNone and bsSingle.
  955.     Checkboxes (Boolean)   Determines whether a checkbox appears next to each
  956.                            list item. If an item's box is checked, the item's
  957.                            Checked property will be True.
  958.     ColumnClick (Boolean)  Determines whether the column headers can be
  959.                            clicked like buttons (when ViewStyle = vsReport).
  960.     Columns (TListColumns) The collection of list columns for report view.
  961.                            Create new columns with $ListView.Columns.Add().
  962.     FlatScrollBars (Boolean)   Determines whether the control's scroll bars are
  963.                            drawn flat or with 3D bevels.
  964.     GridLines (Boolean)    Determines whether grid lines are drawn in list and
  965.                            report views.
  966.     HideSelection (Boolean)    Determines whether the selection is hidden when
  967.                            another control has the focus.
  968.     HotTrack (Boolean)     Determines whether the user can select items by
  969.                            pausing the mouse over them.
  970.     HotTrackStyles (set)   Changes options for hot tracking. Possible members
  971.                            are htHandPoint (mouse cursor turns into a hand),
  972.                            htUnderlineCold (underline all untracked items), and
  973.                            htUnderlineHot (underline the tracked item).
  974.     HoverTime (Integer)    How long the user has to pause the mouse to select
  975.                            an item, in milliseconds. -1 uses the system default.
  976.     ItemFocused (TListItem)    The item that is currently focused, or "nil" if
  977.                            no item is focused.
  978.     Items (TListItems)     The collection of items in the list. Create new items
  979.                            with $ListView.Items.Add()
  980.     LargeImages (TImageList)   The bitmaps to use for large icon view. Set an
  981.                            item's ImageIndex property to assign it one of these.
  982.     MultiSelect (Boolean)  Determines whether the user can select more than one
  983.                            item at a time.
  984.     OwnerDraw (Boolean)    Determines whether the OnDrawItem event is called to
  985.                            draw list items.
  986.     ReadOnly (Boolean)     Determines whether the user is able to edit item
  987.                            captions.
  988.     RowSelect (Boolean)    Determines whether the user selects entire rows at
  989.                            once in report view.
  990.     SelCount (Integer)     The number of selected items.
  991.     Selected (TListItem)   The item that is currently selected, or "nil" if no
  992.                            item is selected.
  993.     SmallImages (TImageList)   The bitmaps to use for small icon view. Set an
  994.                            item's ImageIndex property to assign it one of these.
  995.     StateImages (TImageList)   The bitmaps to use for items' StateIndex
  996.                            properties.
  997.     ViewStyle (enumeration)    The current view mode. Possible values are
  998.                            vsIcon, vsSmallIcon, vsList, and vsReport.
  999.   Methods:
  1000.     AlphaSort              Sorts the items in alphabetical order by caption, or
  1001.                            by calling the OnCompare event with $Data empty if
  1002.                            an OnCompare handler is set.
  1003.     Arrange <type>         Arranges the icons. For <type>, 0 = align along the
  1004.                            bottom, 1 = align along the left, 2 = align along
  1005.                            the right, 3 = align along the top, 4 = default
  1006.                            alignment, 5 = snap to grid.
  1007.     CustomSort <text>      Sorts the items by calling the OnCompare event.
  1008.                            <text> is passed to the event as $Data.
  1009.     GetColumn(<i>)         Returns the i'th item from the Columns collection.
  1010.   Events:
  1011.     OnChange               Called when an item's properties change. $Item is
  1012.                            the item and $Change is ctText if the caption
  1013.                            changed, ctImage if the image changed, or ctState if
  1014.                            the Cut, Focused, or Selected property changed.
  1015.     OnChanging             Called when an item's properties are about to
  1016.                            change. $Item is the item, $Change is as above, and
  1017.                            the event should set $AllowChange to 0 (don't allow
  1018.                            the change) or 1 (allow it).
  1019.     OnColumnClick          Called when the user clicks a column header, if the
  1020.                            ColumnClick property is True. $Column is the column
  1021.                            object that was clicked.
  1022.     OnColumnRightClick     Called when the user right-clicks a column header.
  1023.                            $Column is the column object, $X and $Y are the
  1024.                            click location in client coordinates.
  1025.     OnCompare              Called to compare items for sorting. $Item1 and
  1026.                            $Item2 are the item objects being compared, $Data is
  1027.                            the parameter given to CustomSort, and the event
  1028.                            should set $Compare to a negative value if $Item1
  1029.                            comes first, a positive value if $Item2 comes first,
  1030.                            or 0 if the items are equal. $Data is empty if the
  1031.                            event is being called by AlphaSort.
  1032.     OnDeletion             Called when an item ($Item) is about to be deleted.
  1033.     OnEdited               Called when the user has changed an item's caption.
  1034.                            $Item is the item and $Text is the new value.
  1035.                            Change $Text to override the user's value.
  1036.     OnEditing              Called when the user is about to edit an item's
  1037.                            caption. $Item is the item, and the event should set
  1038.                            $AllowEdit to 0 (don't allow editing) or 1 (allow).
  1039.     OnInfoTip              Called when the hint is about to be displayed. $Item
  1040.                            is the item under the mouse and $InfoTip is the
  1041.                            default hint. Change $InfoTip to display a different
  1042.                            hint.
  1043.     OnInsert               Called when a new item ($Item) is being inserted.
  1044.     OnSelectItem           Called when an item is being selected or unselected.
  1045.                            $Item is the item, $Selected is 0 if the item was
  1046.                            unselected or 1 if it was selected.
  1047.  
  1048. TListColumn
  1049.   This represents a column in a list view. Columns are only shown when
  1050.   ViewStyle is vsReport.
  1051.   
  1052.   Properties:
  1053.     Alignment (enumeration)    Determines the horizontal placement of text in
  1054.                            the column. Possible values are taLeftJustify,
  1055.                            taRightJustify, and taCenter.
  1056.     AutoSize (Boolean)     Determines whether the column automatically resizes
  1057.                            to the width of its text.
  1058.     Caption (string)       The caption shown at the top of the column.
  1059.     ImageIndex (Integer)   The index into the list view's SmallImages list of
  1060.                            an image to display in the column, or -1 for none.
  1061.     MaxWidth (Integer)     The largest that the user will be able to resize the
  1062.                            column.
  1063.     MinWidth (Integer)     The smallest that the user will be able to resize
  1064.                            the column.
  1065.     Width (Integer)        The width of the column. Set this to -1 to
  1066.                            resize the column to the width of the text, or -2 to
  1067.                            resize the column to the width of its caption.
  1068.  
  1069. TListItem
  1070.   This represents an item in a list view.
  1071.   
  1072.   Properties:
  1073.     Caption (string)       The text displayed for the item.
  1074.     Checked (Boolean)      Determines whether the item's box is checked when
  1075.                            the list view's Checkboxes property is True.
  1076.     Cut (Boolean)          Determines whether the item appears dimmed like
  1077.                            a file being cut in Explorer.
  1078.     Focused (Boolean)      Determines whether the item has input focus.
  1079.     ImageIndex (Integer)   The index into the list view's LargeImages or
  1080.                            SmallImages lists for this item, or -1 to display
  1081.                            no image.
  1082.     Indent (Integer)       The number of small image widths this item is
  1083.                            indented for report view.
  1084.     Index (Integer)        The index of this item in the list view's Items
  1085.                            collection. Read-only.
  1086.     Left (Integer)         The horizontal position of this item for icon views.
  1087.     ListView (TListView)   The list view that contains this item. Read-only.
  1088.     OverlayIndex (Integer) The index into the list view's StateImages list of
  1089.                            an image that should be drawn over the item's icon,
  1090.                            or -1 for no overlay.
  1091.     Selected (Boolean)     Determines whether the item is selected.
  1092.     StateIndex (Integer)   The index into the list view's StateImages list of
  1093.                            an image to display to the left of the item's icon,
  1094.                            or -1 for no state image.
  1095.     SubItems (TStrings)    A list of strings for subitems in report view. The
  1096.                            first column is the item's caption, the second
  1097.                            column is the first subitem, the third column is the
  1098.                            second subitem, and so on.
  1099.     Top (Integer)          The vertical position of this item for icon views.
  1100.   Methods:
  1101.     CancelEdit             Ends editing of the caption and discards any changes
  1102.                            made by the user.
  1103.     EditCaption            Puts the item into edit mode, allowing the user to
  1104.                            change the caption.
  1105.     GetSubItemImage(<i>)   Returns the index into the list view's
  1106.                            SmallImages list of an image to display next to the
  1107.                            i'th subitem in report view, or -1 for none.
  1108.     MakeVisible <partial>  Scrolls the list item into view. If <partial> is
  1109.                            0, the item will be scrolled if it's not completely
  1110.                            visible; if <partial> is 1, the item won't be
  1111.                            scrolled if it's already partially visible.
  1112.     SetSubItemImage <i> <index>    Sets the i'th subitem's image.
  1113.  
  1114. Invisible Controls
  1115. ------------------
  1116.  
  1117. TStrings
  1118.   This is used by several controls to hold a list of strings. It contains a
  1119.   dynamically growing list with items numbered starting at zero. This control
  1120.   cannot be created; use TStringList for a standalone string list.
  1121.  
  1122.   Properties:
  1123.     CommaText (string)     Contains all the strings in the list joined together
  1124.                            with commas. Any items with spaces, commas, or
  1125.                            quotes will be surrounded in double quotes, and any
  1126.                            double quotes in the item will be repeated. Set this
  1127.                            to change the entire list at once.
  1128.     Count (integer)        Returns the number of strings in the list.
  1129.                            Read-only.
  1130.     Text (string)          Contains all the strings in the list joined together
  1131.                            with carriage return/line feed pairs
  1132.                            ($char(13)$char(10)). Set this to change the entire
  1133.                            list at once.
  1134.   Methods:
  1135.     Add(<string>)          Adds the string to the list and returns its index.
  1136.                            Call this as a command if the index isn't needed.
  1137.     Assign <object>        Assigns another object (which must be a TStrings) to
  1138.                            this one. This list now contains the same strings as
  1139.                            the other list.
  1140.     Clear                  Removes all the strings from the list.
  1141.     Delete <num>           Deletes the numbered string from the list.
  1142.     Equals(<object>)       Returns true if the other list contains the same
  1143.                            strings in the same order as this one.
  1144.     Exchange <a> <b>       Exchanges strings numbered <a> and <b>.
  1145.     Execute                Executes the contents of the list as Versus code.
  1146.     GetAliasList           Fills the string list with a list of all the names
  1147.                            of aliases that have been created. Only enabled if
  1148.                            the VSInterp is allowed to manage aliases.
  1149.     GetDirList <mask>      Fills the string list with a list of all the
  1150.                            directories matching <mask>. Only enabled if file
  1151.                            commands/functions are enabled.
  1152.     GetFileList <mask>     Fills the string list with a list of all the files
  1153.                            matching <mask>. Only enabled if file
  1154.                            commands/functions are enabled.
  1155.     GetString(<num>)       Returns the string at the given position.
  1156.     IndexOf(<string>)      Searches the list and returns the position where
  1157.                            <string> appears, or -1 if it does not appear.
  1158.     IndexOfMask(<mask>)    Returns the position of the first string that
  1159.                            matches <mask>, or -1 if none match.
  1160.     IndexOfName(<string>)  Searches the list and returns the position where
  1161.                            <string> appears to the left of an equal sign, or -1
  1162.                            if it does not appear.
  1163.     Insert <num> <string>  Inserts the string at the given position.
  1164.     LoadFromAlias <name>   Loads the string list with the code of the named
  1165.                            alias. Only enabled if the VSInterp is allowed to
  1166.                            manage aliases.
  1167.     LoadFromFile <file>    Loads the string list from the lines in the named
  1168.                            file. Only enabled if file commands/functions are
  1169.                            enabled.
  1170.     LoadFromList <list>    Loads the string list from a Versus list so that
  1171.                            each string in the list corresponds to an element of
  1172.                            the Versus list.
  1173.     LoadFromSet <set>      Loads the list from a set so that each string in the
  1174.                            list is a corresponding item of the set.
  1175.     Move <from> <to>       Moves the string at position <from> so that it
  1176.                            occupies position <to>.
  1177.     SaveToAlias <name>     Creates or replaces an alias with the given name,
  1178.                            using the strings in the list as code. Only enabled
  1179.                            if the VSInterp is allowed to manage aliases.
  1180.     SaveToFile <file>      Saves the string list to the named file. Only
  1181.                            enabled if file commands/functions are enabled.
  1182.     SaveToList()           Returns the string list converted to a Versus list,
  1183.                            where each item of the Versus list corresponds to a
  1184.                            string in the list.
  1185.     SaveToSet()            Returns the list converted to a set, where each item
  1186.                            of the set is a corresponding string in the list.
  1187.     SetString <num> <string>    Sets the string at the given position.
  1188.  
  1189. TStringList
  1190.   This derives from TStrings to implement a standalone string list.
  1191.  
  1192.   Properties:
  1193.     Sorted (Boolean)       Determines whether the strings in the list are
  1194.                            automatically sorted, and the Add method inserts new
  1195.                            strings in the correct alphabetical position.
  1196.  
  1197. TTimer
  1198.   This fires an event repeatedly after a specified interval.
  1199.  
  1200.   Properties:
  1201.     Enabled (Boolean)      Determines whether the timer is ticking.
  1202.     Interval (integer)     The number of milliseconds that pass between
  1203.                            event firings.
  1204.   Events:
  1205.     OnTimer                Called every <Interval> milliseconds while the timer
  1206.                            is enabled. This is a notify event.
  1207.  
  1208. TIcon
  1209.   This represents an icon. Use this in a form's Icon property.
  1210.  
  1211.   Properties:
  1212.     Height/Width (integer) Return the height and width of the icon. Read-only.
  1213.   Methods:
  1214.     LoadFromFile <file>    Loads an icon file from the disk into the object.
  1215.  
  1216. TBitmap
  1217.   This represents a bitmap. Use this in a button's Glyph property.
  1218.  
  1219.   Properties:
  1220.     Height/Width (integer) Return the height and width of the bitmap.
  1221.                            Read-only.
  1222.   Methods:
  1223.     LoadFromFile <file>    Loads an bitmap file from the disk into the object.
  1224.  
  1225. TFont
  1226.   This represents a font. Most visible controls have Font properties that
  1227.   hold TFont objects.
  1228.  
  1229.   Properties:
  1230.     Color (color)          Specifies the color of the text.
  1231.     Name (string)          Specifies the name of the font.
  1232.     Size (integer)         Specifies the size of the font in points.
  1233.     Style (set)            Specifies the style of the font. Possible members
  1234.                            are fsBold, fsItalic, fsUnderline, and fsStrikeout.
  1235.  
  1236. TListColumns
  1237.   This is the collection used by TListView to manage the columns.
  1238.   
  1239.   Properties:
  1240.     Count (Integer)        Returns the number of columns in the collection.
  1241.                            Read-only.
  1242.   Methods:
  1243.     Add()                  Creates a new column (TListColumn) and returns the
  1244.                            object handle.
  1245.     Assign <obj>           Copies all the items from <obj>, which must be a
  1246.                            TListColumns.
  1247.     BeginUpdate            Call this before making a lot of changes to the
  1248.                            columns to reduce flicker.
  1249.     Clear                  Deletes all the columns.
  1250.     Delete <i>             Deletes the i'th column from the list.
  1251.     EndUpdate              Call this when you are done making changes after
  1252.                            BeginUpdate.
  1253.     IndexOf(<obj>)         Returns the index of <obj> in the collection.
  1254.     Insert(<i>)            Creates a new column at position <i> and returns the
  1255.                            object handle.
  1256.     GetItem(<i>)           Returns the i'th column object.
  1257.  
  1258. TListItems
  1259.   This is the collection used by TListView to manage the items.
  1260.   
  1261.   Properties:
  1262.     Count (Integer)        Returns the number of items in the list. Read-only.
  1263.   Methods:
  1264.     Add()                  Creates a new item (TListItem) and returns the
  1265.                            object handle.
  1266.     Assign <obj>           Copies all the items from <obj>, which must be a
  1267.                            TListItems.
  1268.     BeginUpdate            Call this before making a lot of changes to the
  1269.                            items to reduce flicker.
  1270.     Clear                  Deletes all the items.
  1271.     Delete <i>             Deletes the i'th item from the list.
  1272.     EndUpdate              Call this when you are done making changes after
  1273.                            BeginUpdate.
  1274.     IndexOf(<obj>)         Returns the index of <obj> in the collection.
  1275.     Insert(<i>)            Creates a new item at position <i> and returns the
  1276.                            object handle.
  1277.     GetItem(<i>)           Returns the i'th item object.
  1278.  
  1279. TImageList
  1280.    This holds a list of images for use with TListView.
  1281.    
  1282.    Properties:
  1283.      BkColor (color)       The color used for the masked regions of images in
  1284.                            the list, or clNone to draw transparently.
  1285.      BlendColor (color)    The color to be combined with the images when they
  1286.                            are being drawn to appear focused or selected, or
  1287.                            clNone for no blend color, or clDefault for the
  1288.                            system default.
  1289.      Count (Integer)       Returns the number of images in the list. Read-only.
  1290.      Height (Integer)      The height of images in the list. The list is
  1291.                            cleared when this changes.
  1292.      Masked (Boolean)      Determines whether the image list includes masks for
  1293.                            transparent drawing.
  1294.      Width (Integer)       The width of images in the list. The list is cleared
  1295.                            when this changes.
  1296.    Methods:
  1297.      Add(<obj>)            Adds <obj>, which must be a TBitmap, to the list.
  1298.                            Returns the new index.
  1299.      Add(<obj> <mask>)     Adds a bitmap to the list along with an associated
  1300.                            mask for transparency, which must also be a TBitmap.
  1301.                            Returns the new index.
  1302.      AddIcon(<obj>)        Adds <obj>, which must be a TIcon, to the list.
  1303.                            Returns the new index. Icons don't need a separate
  1304.                            image for transparency.
  1305.      AddImages <obj>       Copies all the images from <obj>, which must be a
  1306.                            TImageList. Existing images are kept.
  1307.      AddMasked(<obj> <color>)  Adds <obj>, which must be a TBitmap, to the
  1308.                            list. A mask will be created making all the pixels
  1309.                            with the given color transparent. Returns the new
  1310.                            index.
  1311.      Assign <obj>          Copies all the images from <obj>, which must be a
  1312.                            TImageList. Existing images are discarded.
  1313.      Clear                 Deletes all the images.
  1314.      Delete <i>            Deletes the i'th image.
  1315.      Draw <obj> <x>,<y> <i>    Draws the i'th image at position (x,y) on <obj>,
  1316.                            which must be a TCanvas.
  1317.      DrawOverlay <obj> <x>,<y> <i> <o>     Draws the i'th image with the o'th
  1318.                            overlay on <obj>, which must be a TCanvas. Set up
  1319.                            overlays with the Overlay method.
  1320.      GetBitmap <i> <obj>   Copies the i'th image into <obj>, which must be a
  1321.                            TBitmap.
  1322.      GetIcon <i> <obj>     Copies the i'th image into <obj>, which must be a
  1323.                            TIcon.
  1324.      Insert <i> <obj>      Inserts a bitmap into the list at position <i>.
  1325.      Insert <i> <obj> <mask>   Inserts a bitmap with associated mask.
  1326.      InsertIcon <i> <obj>  Inserts an icon into the list at position <i>.
  1327.      InsertMasked <i> <obj> <color>    Inserts a bitmap and generates a mask.
  1328.      Move <i> <j>          Moves an image from position <i> to position <j>.
  1329.      Overlay <i> <o>       Allows image <i> to be used as overlay <o> for
  1330.                            DrawOverlay. <o> must be between 0 and 3.
  1331.      Replace <i> <obj>     Replaces image <i> with a new bitmap.
  1332.      Replace <i> <obj> <mask>  Replaces image <i> with a new bitmap and mask.
  1333.      ReplaceIcon <i> <obj> Replaces image <i> with a new icon.
  1334.      ReplaceMask <i> <obj> <color>     Replaces image <i> with a new bitmap
  1335.                            and generates a mask.
  1336.